package gretha.GUI;

import gretha.GUI.utils.LigneCreationMassif;
import gretha.Jtables.JTableCohorte;
import gretha.Jtables.JTableCohortesDuMassif;
import gretha.Jtables.JTablePrelevement;
import gretha.Jtables.JTablePrixDuBois;
import gretha.Jtables.JTablePrixDuBoisModif;
import gretha.donnees.Cohorte;
import gretha.donnees.CohorteDuMassif;
import gretha.donnees.Massif;
import gretha.donnees.Modification;
import gretha.donnees.Prelevement;
import gretha.donnees.PrixDuBois;
import gretha.donnees.PrixDuBoisEntite;
import gretha.modelsDeJTable.CohortesDuMassifTableModel;
import gretha.modelsDeJTable.ModificationTableModel;
import gretha.modelsDeJTable.PrelevementTableModel;
import gretha.modelsDeJTable.PrixDuBoisTableModel;
import gretha.panels.CreationScenario;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.GridLayout;
import java.util.ArrayList;

import javax.swing.GroupLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

/**
 * 
 * La classe PartieCentrale contient la partie graphique du centre de la page
 * ainsi que les événements lui étant liés.
 * 
 */
public class PartieCentrale extends JPanel {

	private static final long serialVersionUID = -530082045952455620L;

	private JPanel panel;

	private FenetrePrincipale parent;

	private JPanel hautDePanel;

	private JPanel corps;

	private JPanel piedDePage;

	private Cohorte cohorteSelectionnee;

	private Massif massifSelectionne;

	private static ArrayList<Massif> listeDesMassifsDuScenario;

	private static ArrayList<LigneCreationMassif> listeLignes;

	/* ####### OUTILS ######## */
	int it = 0;
	int numeroLigne = 1;

	public PartieCentrale(FenetrePrincipale parent) {
		super();

		this.parent = parent;

		// On initialise les panels
		corps = new JPanel();
		hautDePanel = new JPanel();
		panel = new JPanel();
		piedDePage = new JPanel();

		// On initialise nos objets
		cohorteSelectionnee = new Cohorte();
		massifSelectionne = new Massif();
		listeLignes = new ArrayList<LigneCreationMassif>();
		listeDesMassifsDuScenario = new ArrayList<Massif>();

		// On initialise les données
		parent.recupererCohortes();
		parent.recupererMassifs();
		parent.recupererTypeDeBois();

		// couleur de fond
		this.setBackground(Color.white);
		// bordure noire
		// this.setBorder(BorderFactory.createLineBorder(Color.black));
		parent.changerLaTaille(1280, 800);
		parent.setBackground(Color.white);
		panel.setBackground(Color.white);
		panel.setLayout(new GridLayout(3, 3));

		ImageIcon imageCNRS = new ImageIcon("res/Images/cnrs.jpeg");
		JLabel labelImageCNRS = new JLabel(imageCNRS);

		ImageIcon imagebdx4 = new ImageIcon("res/Images/bordeaux4.jpeg");
		JLabel labelImagebdx4 = new JLabel(imagebdx4);

		ImageIcon imagegretha = new ImageIcon("res/Images/gretha.jpeg");
		JLabel labelImagegretha = new JLabel(imagegretha);

		ImageIcon imagefcba = new ImageIcon("res/Images/fcba.jpeg");
		JLabel labelImagefcba = new JLabel(imagefcba);

		ImageIcon imageaquitaine = new ImageIcon("res/Images/aquitaine.jpeg");
		JLabel labelImageaquitaine = new JLabel(imageaquitaine);

		panel.add(labelImagefcba);
		panel.add(new JLabel(""));
		panel.add(labelImagebdx4);
		panel.add(new JLabel(""));
		panel.add(new JLabel("Veuilez sélectionner une action dans le menu"));
		panel.add(new JLabel(""));
		panel.add(labelImagegretha);
		panel.add(labelImageCNRS);
		panel.add(labelImageaquitaine);

		this.add(panel);

	}

	public void remplacerContenu(JPanel nouveauPanel) {
		this.removeAll();
		this.panel = nouveauPanel;
		this.add(panel);
		this.revalidate();
		this.repaint();
	}

	public void rafraichir() {
		parent.validate();
		parent.repaint();
		revalidate();
		repaint();
		corps.revalidate();
		corps.repaint();

	}

	private void nettoyer() {
		corps.removeAll();
		hautDePanel.removeAll();
		corps = new JPanel();
		hautDePanel = new JPanel();
		cohorteSelectionnee = new Cohorte();
		massifSelectionne = new Massif();
	}

	public void afficherCohortes() {
		nettoyer();
		parent.changerLaTaille(1280, 800);
		JPanel panel = new JPanel();
		panel.setLayout(new BorderLayout());

		// On affiche une liste de cohortes et un titre
		hautDePanel.setBackground(Color.white);
		JLabel titre = new JLabel("Choisir une cohorte  : ");
		hautDePanel.add(titre);
		parent.recupererCohortes();
		String[] cohortes = new String[25];
		int i = 0;
		final int[][] idDesCohortes = new int[25][25];

		for (Cohorte c : parent.getCohortes()) {
			cohortes[i] = c.getNom();
			idDesCohortes[i][0] = c.getId();
			i++;
		}
		final JComboBox listeCohortes = new JComboBox(cohortes);

		listeCohortes.setBackground(Color.white);
		hautDePanel.add(listeCohortes);

		JButton boutonAff = new JButton("Afficher");
		java.awt.event.ActionListener action = new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent e) {

				/*
				 * On récupère la cohorte sélectionnée
				 */
				corps.removeAll();
				int idCohorteSelectionne = idDesCohortes[listeCohortes
						.getSelectedIndex()][0];
				cohorteSelectionnee.recupererDonnees(idCohorteSelectionne);

				JPanel pan = new JPanel();
				pan.setAlignmentX(CENTER_ALIGNMENT);
				pan.setLayout(new BorderLayout());

				/*
				 * Haut du corps de page avec le nom de la cohorte et l'arbre la
				 * composant
				 */
				JPanel haut = new JPanel();
				JLabel nomCohorte = new JLabel("Cohorte : "
						+ cohorteSelectionnee.getNom() + " ");
				JLabel nomArbre = new JLabel(": "
						+ cohorteSelectionnee.getArbres().get(0).getNom());
				haut.add(nomCohorte);
				haut.add(nomArbre);
				pan.add(haut, BorderLayout.NORTH);

				/*
				 * Recupération des modifications de la cohorte
				 */
				Modification[] donneesModifications = new Modification[cohorteSelectionnee
						.anneeDeFin() - cohorteSelectionnee.anneeDeDebut()];

				for (int i = cohorteSelectionnee.anneeDeDebut(); i < cohorteSelectionnee
						.anneeDeFin(); i++) {
					int idCohorte = cohorteSelectionnee.getId();
					double volume = cohorteSelectionnee.modificationEnAnnee(i,
							idCohorte).getVolumeUnitaire();
					double mortalite = cohorteSelectionnee.modificationEnAnnee(
							i, idCohorte).getTauxDeMortalite();
					donneesModifications[i - cohorteSelectionnee.anneeDeDebut()] = new Modification(
							i, volume, mortalite);
				}

				// On créé la JTable et on la met dans un JScrollPane
				final JTableCohorte tblModification = new JTableCohorte(
						new ModificationTableModel(donneesModifications));
				JScrollPane scroll = new JScrollPane(tblModification,
						JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
						JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

				/*
				 * Récupération des prélévements de la cohorte
				 */
				Prelevement[] donneesPrelevements = new Prelevement[cohorteSelectionnee
						.getPrelevements().size()];
				int j = 0;
				for (Prelevement p : cohorteSelectionnee.getPrelevements()) {
					donneesPrelevements[j] = p;
					j++;
				}

				// On créé la JTable et on la met dans un JScrollPane
				JTablePrelevement tblPrelevement = new JTablePrelevement(
						new PrelevementTableModel(donneesPrelevements));
				JScrollPane scroll2 = new JScrollPane(tblPrelevement,
						JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
						JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

				// On met à jour l'affichage
				pan.add(scroll);
				JPanel pan2 = new JPanel();

				pan2.setLayout(new BorderLayout());
				pan2.add(new JLabel("Prélévements : "), BorderLayout.NORTH);
				pan2.add(scroll2);

				corps.add(pan);
				corps.add(pan2);
				corps.revalidate();
				rafraichir();
			}
		};
		boutonAff.addActionListener(action);
		hautDePanel.add(boutonAff);

		// Corps
		corps.setBackground(Color.white);

		panel.add(hautDePanel, BorderLayout.NORTH);
		panel.add(corps);
		remplacerContenu(panel);
	}

	public void modifierCohorte() {
		nettoyer();
		parent.changerLaTaille(1280, 800);
		JPanel panel = new JPanel();
		panel.setLayout(new BorderLayout());

		// On affiche une liste de cohortes et un titre
		hautDePanel.setBackground(Color.white);
		JLabel titre = new JLabel("Choisir une cohorte  : ");
		hautDePanel.add(titre);
		parent.recupererCohortes();
		String[] cohortes = new String[25];
		int i = 0;
		final int[][] idDesCohortes = new int[25][25];

		for (Cohorte c : parent.getCohortes()) {
			cohortes[i] = c.getNom();
			idDesCohortes[i][0] = c.getId();
			i++;
		}
		final JComboBox listeCohortes = new JComboBox(cohortes);

		listeCohortes.setBackground(Color.white);
		hautDePanel.add(listeCohortes);
		JButton boutonModif = new JButton("Modifier");
		java.awt.event.ActionListener action = new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent e) {

				/*
				 * On récupère la cohorte sélectionnée
				 */
				corps.removeAll();
				int idCohorteSelectionne = idDesCohortes[listeCohortes
						.getSelectedIndex()][0];
				cohorteSelectionnee.recupererDonnees(idCohorteSelectionne);

				JPanel pan = new JPanel();
				pan.setAlignmentX(CENTER_ALIGNMENT);
				pan.setLayout(new BorderLayout());

				/*
				 * Haut du corps de page avec le nom de la cohorte et l'arbre la
				 * composant
				 */
				JPanel haut = new JPanel();
				JLabel nomCohorte = new JLabel("Cohorte : "
						+ cohorteSelectionnee.getNom() + " ");
				JLabel nomArbre = new JLabel(": "
						+ cohorteSelectionnee.getArbres().get(0).getNom());
				haut.add(nomCohorte);
				haut.add(nomArbre);
				pan.add(haut, BorderLayout.NORTH);

				/*
				 * Recupération des modifications de la cohorte
				 */
				Modification[] donneesModifications = new Modification[cohorteSelectionnee
						.anneeDeFin() - cohorteSelectionnee.anneeDeDebut()];

				for (int i = cohorteSelectionnee.anneeDeDebut(); i < cohorteSelectionnee
						.anneeDeFin(); i++) {
					int idCohorte = cohorteSelectionnee.getId();
					double volume = cohorteSelectionnee.modificationEnAnnee(i,
							idCohorte).getVolumeUnitaire();
					double mortalite = cohorteSelectionnee.modificationEnAnnee(
							i, idCohorte).getTauxDeMortalite();
					donneesModifications[i - cohorteSelectionnee.anneeDeDebut()] = new Modification(
							i, volume, mortalite);
				}

				// On créé la JTable et on la met dans un JScrollPane
				JTableCohorte tblModification = new JTableCohorte(
						new ModificationTableModel(donneesModifications));
				JScrollPane scroll = new JScrollPane(tblModification,
						JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
						JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

				/*
				 * Récupération des prélévements de la cohorte
				 */
				Prelevement[] donneesPrelevements = new Prelevement[cohorteSelectionnee
						.getPrelevements().size()];
				int j = 0;
				for (Prelevement p : cohorteSelectionnee.getPrelevements()) {
					donneesPrelevements[j] = p;
					j++;
				}

				// On créé la JTable et on la met dans un JScrollPane
				JTablePrelevement tblPrelevement = new JTablePrelevement(
						new PrelevementTableModel(donneesPrelevements));
				JScrollPane scroll2 = new JScrollPane(tblPrelevement,
						JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
						JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

				// On met à jour l'affichage
				pan.add(scroll);
				JPanel pan2 = new JPanel();

				pan2.setLayout(new BorderLayout());
				pan2.add(new JLabel("Prélévements : "), BorderLayout.NORTH);
				pan2.add(scroll2);
				corps.add(pan);
				corps.add(pan2);
				corps.revalidate();
				rafraichir();
			}
		};
		boutonModif.addActionListener(action);
		hautDePanel.add(boutonModif);

		// Corps
		corps.setBackground(Color.white);

		panel.add(hautDePanel, BorderLayout.NORTH);
		panel.add(corps);
		remplacerContenu(panel);
	}

	public void supprimerCohorte() {
		nettoyer();
		parent.changerLaTaille(1280, 800);
		JPanel panel = new JPanel();
		panel.setLayout(new BorderLayout());
		// On affiche une liste de cohortes et un titre
		hautDePanel.setBackground(Color.white);
		JLabel titre = new JLabel("Choisir une cohorte  : ");
		hautDePanel.add(titre);
		parent.recupererCohortes();
		String[] cohortes = new String[25];
		int i = 0;
		final int[][] idDesCohortes = new int[25][25];

		for (Cohorte c : parent.getCohortes()) {
			cohortes[i] = c.getNom();
			idDesCohortes[i][0] = c.getId();
			i++;
		}
		final JComboBox listeCohortes = new JComboBox(cohortes);

		listeCohortes.setBackground(Color.white);
		hautDePanel.add(listeCohortes);
		JButton boutonSupp = new JButton("Supprimer");
		java.awt.event.ActionListener action = new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent e) {
				corps.removeAll();
				int idCohorteSelectionne = idDesCohortes[listeCohortes
						.getSelectedIndex()][0];
				cohorteSelectionnee.recupererDonnees(idCohorteSelectionne);

				int idCohorteASupprimer = cohorteSelectionnee.getId();
				Cohorte.supprimerCohorteEnBase(idCohorteASupprimer);

				/*
				 * Mise à jour de l'affichage
				 */
				supprimerCohorte();
			}
		};
		boutonSupp.addActionListener(action);
		hautDePanel.add(boutonSupp);

		// Corps
		corps.setBackground(Color.white);

		panel.add(hautDePanel, BorderLayout.NORTH);
		panel.add(corps);
		remplacerContenu(panel);
	}

	public void creerMassifs() {
		nettoyer();
		parent.changerLaTaille(1280, 800);
		JPanel panel = new JPanel();
		panel.setLayout(new BorderLayout());

		// On affiche une liste de massifs et un titre
		hautDePanel.setBackground(Color.white);
		JLabel titre = new JLabel("Création d'un massif");
		hautDePanel.add(titre);

		/*
		 * LAYOUT
		 */
		final GroupLayout groupe = new GroupLayout(corps);
		corps.setLayout(groupe);
		groupe.setAutoCreateContainerGaps(true);
		groupe.setAutoCreateGaps(true);
		final GroupLayout.ParallelGroup horzGroupe = groupe
				.createParallelGroup();
		final GroupLayout.SequentialGroup vertGroupe = groupe
				.createSequentialGroup();

		/*
		 * Nom du massif
		 */
		JLabel labelNomMassif = new JLabel("Nom du massif : ");
		labelNomMassif.setName("labelnomMassif");

		JTextField textfieldNomMassif = new JTextField(15);
		textfieldNomMassif.setName("nomMassif");

		JLabel labelCohorte = new JLabel("Cohortes :");

		/* Liste des cohortes */

		parent.recupererCohortes();
		final String[] cohortes = new String[25];
		int i = 0;
		final int[][] idDesCohortes = new int[25][25];

		for (Cohorte c : parent.getCohortes()) {
			cohortes[i] = c.getNom();
			idDesCohortes[i][0] = c.getId();
			i++;
		}

		LigneCreationMassif ligneCohorte = new LigneCreationMassif(cohortes,
				corps, numeroLigne, nombreDeParcellesTotales());
		listeLignes.add(ligneCohorte);

		/*
		 * Action lors de l'ajout d'une cohorte au massif
		 */
		java.awt.event.ActionListener ajouterUneCohorteAuMassif = new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent e) {

				numeroLigne = numeroLigne + 1;

				LigneCreationMassif ligneCohorte = new LigneCreationMassif(
						cohortes, corps, numeroLigne,
						nombreDeParcellesTotales());
				listeLignes.add(ligneCohorte);
				horzGroupe.addGroup(groupe.createSequentialGroup()
						.addComponent(ligneCohorte));
				vertGroupe.addGroup(groupe.createParallelGroup().addComponent(
						ligneCohorte));

				corps.revalidate();
				rafraichir();
			}
		};

		JButton boutonAjoutCohorte = new JButton("Ajouter une cohorte");
		boutonAjoutCohorte.addActionListener(ajouterUneCohorteAuMassif);

		horzGroupe.addGroup(groupe.createSequentialGroup()
				.addComponent(labelNomMassif).addComponent(textfieldNomMassif));
		horzGroupe.addComponent(labelCohorte);
		horzGroupe.addGroup(groupe.createSequentialGroup().addComponent(
				ligneCohorte));

		vertGroupe.addGroup(groupe.createParallelGroup()
				.addComponent(labelNomMassif).addComponent(textfieldNomMassif));
		vertGroupe.addComponent(labelCohorte);
		vertGroupe.addGroup(groupe.createParallelGroup().addComponent(
				ligneCohorte));

		groupe.setHorizontalGroup(horzGroupe);
		groupe.setVerticalGroup(vertGroupe);

		corps.setBackground(Color.white);

		java.awt.event.ActionListener enregistrerMAssif = new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent e) {
				Massif nouveauMassif = new Massif();
				ArrayList<CohorteDuMassif> listeDesCohortesDuMassif = new ArrayList<CohorteDuMassif>();
				int numeroDeParcelle = 1;
				for (Component c : corps.getComponents()) {
					if (c.getName() != null && c.getName().equals("nomMassif")) {
						nouveauMassif.setNom(((JTextField) c).getText());
					}
				}

				for (LigneCreationMassif lcm : listeLignes) {
					if (!lcm.getCoche()) {
						int idCohorte = idDesCohortes[lcm.getCohorte()][0];
						Cohorte cohorteDeLaLigne = new Cohorte();
						cohorteDeLaLigne.recupererDonnees(idCohorte);
						System.out.println(lcm.getQuantite());
						CohorteDuMassif cohorteDuMassifTmp = new CohorteDuMassif(
								cohorteDeLaLigne, lcm.getQuantite(),
								lcm.getAge(), numeroDeParcelle);
						numeroDeParcelle++;
						listeDesCohortesDuMassif.add(cohorteDuMassifTmp);
					} else {
						int idCohorte = idDesCohortes[lcm.getCohorte()][0];
						Cohorte cohorteDeLaLigne = new Cohorte();
						cohorteDeLaLigne.recupererDonnees(idCohorte);

						int nombreDeParcelle = lcm.getParcelles();
						for (int i = 1; i < nombreDeParcelle; i++) {
							CohorteDuMassif cohorteDuMassifTmp = new CohorteDuMassif(
									cohorteDeLaLigne, lcm.getQuantite()
											/ nombreDeParcelle, lcm.getAge()
											+ i - 1, numeroDeParcelle);
							listeDesCohortesDuMassif.add(cohorteDuMassifTmp);
							numeroDeParcelle++;
						}
					}
				}

				nouveauMassif.setCohortes(listeDesCohortesDuMassif);
				nouveauMassif.sauvegarderEnBDD();
				hautDePanel.removeAll();
				hautDePanel.revalidate();
				corps.removeAll();
				corps.add(new JLabel("Le massif " + nouveauMassif.getNom()
						+ " a bien été enregistré."));
				corps.revalidate();
				rafraichir();
			}
		};
		JButton boutonEnregistrerMassif = new JButton("Enregistrer le massif");
		boutonEnregistrerMassif.addActionListener(enregistrerMAssif);

		JPanel pied = new JPanel();
		pied.setBackground(Color.white);
		pied.add(boutonAjoutCohorte);
		pied.add(boutonEnregistrerMassif);

		panel.add(hautDePanel, BorderLayout.NORTH);
		panel.add(pied, BorderLayout.SOUTH);
		panel.add(corps);
		remplacerContenu(panel);
	}

	public void modifierMassif() {
		nettoyer();
		parent.changerLaTaille(1280, 800);
		JPanel panel = new JPanel();
		panel.setLayout(new BorderLayout());

		// On affiche une liste de massifs et un titre
		hautDePanel.setBackground(Color.white);
		JLabel titre = new JLabel("Choisir un massif : ");
		hautDePanel.add(titre);

		parent.recupererMassifs();
		String[] massifs = new String[25];
		int i = 0;
		final int[][] idDesMassifs = new int[25][25];

		for (Massif m : parent.getMassifs()) {
			massifs[i] = m.getNom();
			idDesMassifs[i][0] = m.getId();
			i++;
		}
		final JComboBox listeMassifs = new JComboBox(massifs);

		listeMassifs.setBackground(Color.white);
		hautDePanel.add(listeMassifs);

		JButton boutonModif = new JButton("Afficher les données");
		java.awt.event.ActionListener action = new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent e) {
				corps.removeAll();
				corps.setBackground(Color.white);

				/*
				 * On récupère le massif sélectionné
				 */
				int idMassifSelectionne = idDesMassifs[listeMassifs
						.getSelectedIndex()][0];
				massifSelectionne.recupererDonnees(idMassifSelectionne);

				/*
				 * On récupère les données du massif
				 */
				JPanel pan = new JPanel();
				CohorteDuMassif[] donnees = new CohorteDuMassif[massifSelectionne
						.getCohortes().size()];
				int i = 0;
				for (CohorteDuMassif cm : massifSelectionne.getCohortes()) {
					donnees[i] = cm;
					i++;
				}

				/*
				 * On créé la JTable et le JScrollPane
				 */
				JTableCohortesDuMassif tableMassif = new JTableCohortesDuMassif(
						new CohortesDuMassifTableModel(donnees));
				JScrollPane scrollTableMassif = new JScrollPane(tableMassif,
						JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
						JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
				pan.add(scrollTableMassif);

				/*
				 * On met à jour l'affichage
				 */
				corps.add(pan);
				corps.revalidate();
				rafraichir();

			}
		};
		boutonModif.addActionListener(action);
		hautDePanel.add(boutonModif);

		panel.add(hautDePanel, BorderLayout.NORTH);
		panel.add(corps);
		remplacerContenu(panel);
	}

	public void supprimerMassif() {
		nettoyer();
		parent.changerLaTaille(1280, 800);
		JPanel panel = new JPanel();
		panel.setLayout(new BorderLayout());

		// On affiche une liste de cohortes et un titre
		hautDePanel.setBackground(Color.white);
		JLabel titre = new JLabel("Choisir un massif : ");
		hautDePanel.add(titre);

		parent.recupererMassifs();
		String[] massifs = new String[25];
		int i = 0;
		final int[][] idDesMassifs = new int[25][25];

		for (Massif m : parent.getMassifs()) {
			massifs[i] = m.getNom();
			idDesMassifs[i][0] = m.getId();
			i++;
		}
		final JComboBox listeMassifs = new JComboBox(massifs);

		listeMassifs.setBackground(Color.white);
		hautDePanel.add(listeMassifs);

		JButton boutonSupp = new JButton("Supprimer");
		java.awt.event.ActionListener action = new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent e) {
				corps.removeAll();

				JPanel pan = new JPanel();
				pan.setBackground(Color.white);
				pan.add(new JLabel("Le massif "
						+ listeMassifs.getSelectedItem()
						+ " a été correctement supprimé."));
				corps.add(pan);

				rafraichir();

				int idMassifASupprimer = idDesMassifs[listeMassifs
						.getSelectedIndex()][0];
				Massif.supprimerMassifEnBDD(idMassifASupprimer);

				supprimerMassif();

			}
		};
		boutonSupp.addActionListener(action);
		hautDePanel.add(boutonSupp);

		// Corps
		corps.setBackground(Color.white);

		panel.add(hautDePanel, BorderLayout.NORTH);
		panel.add(corps);
		remplacerContenu(panel);
	}

	public void creerScenario() {
		nettoyer();
		parent.changerLaTaille(1280, 800);
		remplacerContenu(new CreationScenario(parent.getMassifs(),this));
	}

	public void chargerScenario() {
		nettoyer();
		JPanel panel = new JPanel();
		panel.add(new JLabel("Page de chargement d'un Scenario"));
		remplacerContenu(panel);
	}

	public void afficherPrixDuBois() {
		nettoyer();
		parent.changerLaTaille(1280, 800);
		JPanel tete = new JPanel();
		tete.add(new JLabel(
				"Affichage du prix du bois en fonction de son volume"));
		JPanel panel = new JPanel(new BorderLayout());
		panel.add(tete, BorderLayout.NORTH);

		/*
		 * On récupère les données
		 */
		PrixDuBois pdb = new PrixDuBois();
		pdb.recupererPrixEnBDD();

		/*
		 * On récupère les données
		 */
		PrixDuBoisEntite[] donnees = new PrixDuBoisEntite[pdb.getListeDesPrix()
				.size()];
		int i = 0;

		for (PrixDuBoisEntite ent : pdb.getListeDesPrix()) {
			donnees[i] = ent;
			i++;
		}

		/*
		 * On les met en forme dans une JTable avec scrollbar
		 */
		JTablePrixDuBois tablePrixDuBois = new JTablePrixDuBois(
				new PrixDuBoisTableModel(donnees));
		JScrollPane scroll = new JScrollPane(tablePrixDuBois,
				JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
				JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

		/*
		 * On met à jour l'affichage
		 */
		panel.add(scroll);
		remplacerContenu(panel);
	}

	public void modifierPrixDuBois() {
		nettoyer();
		parent.changerLaTaille(1280, 800);
		JPanel tete = new JPanel();
		tete.add(new JLabel(
				"Modification du prix du bois en fonction de son volume"));
		JPanel panel = new JPanel(new BorderLayout());
		panel.add(tete, BorderLayout.NORTH);
		/*
		 * On récupère les données
		 */
		PrixDuBois pdb = new PrixDuBois();
		pdb.recupererPrixEnBDD();

		/*
		 * On récupère les données
		 */
		PrixDuBoisEntite[] donnees = new PrixDuBoisEntite[pdb.getListeDesPrix()
				.size()];
		int i = 0;

		for (PrixDuBoisEntite ent : pdb.getListeDesPrix()) {
			donnees[i] = ent;
			i++;
		}

		/*
		 * On les met en forme dans une JTable avec scrollbar
		 */
		JTablePrixDuBoisModif tablePrixDuBois = new JTablePrixDuBoisModif(
				new PrixDuBoisTableModel(donnees));
		JScrollPane scroll = new JScrollPane(tablePrixDuBois,
				JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
				JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

		/*
		 * On met à jour l'affichage
		 */
		panel.add(scroll);
		remplacerContenu(panel);
	}

	public void creerProduit() {
		nettoyer();
		JPanel panel = new JPanel();
		panel.add(new JLabel("Page de création d'un produit"));
		remplacerContenu(panel);
	}

	public void modifierProduit() {
		nettoyer();
		JPanel panel = new JPanel();
		panel.add(new JLabel("Page de modification des produits"));
		remplacerContenu(panel);
	}

	public void supprimerProduit() {
		nettoyer();
		JPanel panel = new JPanel();
		panel.add(new JLabel("Page de suppression des produits"));
		remplacerContenu(panel);
	}

	public void afficherProduits() {
		nettoyer();
		JPanel panel = new JPanel();
		panel.add(new JLabel("Page d'affichage des produits"));
		remplacerContenu(panel);
	}

	public void afficherSauvegardeEffectuee(String nomCohorte) {
		nettoyer();
		JPanel panel = new JPanel();
		panel.add(new JLabel("La cohorte " + nomCohorte
				+ " a été ajoutée avec succès"));
		remplacerContenu(panel);
	}

	/*
	 * OUTILS
	 */

	public static void mettreAJourLaLigne(int i) {
		int nombreParcelles = 0;
		for (LigneCreationMassif lcm : listeLignes) {
			if (lcm.getNumeroLigne() >= i) {
				lcm.mettreAJour(nombreParcelles);
			}
			nombreParcelles = nombreParcelles + lcm.getNombreParcelles();
		}
	}

	public static int nombreDeParcellesTotales() {
		int nombreParcelles = 0;
		for (LigneCreationMassif lcm : listeLignes) {
			nombreParcelles = nombreParcelles + lcm.getNombreParcelles();
		}
		return nombreParcelles;
	}

	/*
	 * GETTERS AND SETTERS
	 */

	public ArrayList<Massif> getListeDesMassifsDuScenario() {
		return listeDesMassifsDuScenario;
	}

	public static void setListeDesMassifsDuScenario(
			ArrayList<Massif> listeDesMassifsDuScenarioRemplacant) {
		listeDesMassifsDuScenario = listeDesMassifsDuScenarioRemplacant;
	}

	public JPanel getHautDePanel() {
		return hautDePanel;
	}

	public void setHautDePanel(JPanel hautDePanel) {
		this.hautDePanel = hautDePanel;
	}

	public JPanel getCorps() {
		return corps;
	}

	public void setCorps(JPanel corps) {
		this.corps = corps;
	}

	public JPanel getPiedDePage() {
		return piedDePage;
	}

	public void setPiedDePage(JPanel piedDePage) {
		this.piedDePage = piedDePage;
	}


	public Container getFenetreParent() {
		// TODO Auto-generated method stub
		return parent;
	}

}
